From 99e5ab5b4e586580e051e23eaea1f69a0d05759b Mon Sep 17 00:00:00 2001 From: Yves Jacolin Date: Thu, 20 Sep 2012 09:27:36 +0200 Subject: [PATCH 1/3] add configuration for geometry column in WFS filter for WFS CONNECTIONTYPE layer --- mapwfslayer.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/mapwfslayer.c b/mapwfslayer.c index ad278d6745..ad559a9dee 100644 --- a/mapwfslayer.c +++ b/mapwfslayer.c @@ -214,6 +214,7 @@ static char *msBuildWFSLayerPostRequest(mapObj *map, layerObj *lp, { char *pszPostReq = NULL; char *pszFilter = NULL; + char *nGeometryName = "Geometry"; size_t bufferSize = 0; if (psParams->pszVersion == NULL || @@ -231,6 +232,8 @@ static char *msBuildWFSLayerPostRequest(mapObj *map, layerObj *lp, } + if (psParams->pszGeometryName) + nGeometryName = psParams->pszGeometryName); if (psParams->pszFilter) pszFilter = psParams->pszFilter; @@ -239,12 +242,12 @@ static char *msBuildWFSLayerPostRequest(mapObj *map, layerObj *lp, pszFilter = (char *)msSmallMalloc(bufferSize); snprintf(pszFilter, bufferSize, "\n" "\n" - "Geometry\n" + "%f\n" "\n" "%f,%f %f,%f\n" "\n" "\n" - "",bbox->minx, bbox->miny, bbox->maxx, bbox->maxy); + "", nGeometryName, bbox->minx, bbox->miny, bbox->maxx, bbox->maxy); } bufferSize = strlen(pszFilter)+500; From 89311463fb759c2387507f9e8907c2d2216b85aa Mon Sep 17 00:00:00 2001 From: Yves Jacolin Date: Fri, 21 Sep 2012 17:52:11 +0200 Subject: [PATCH 2/3] finalize adding new GeometryName parameter to choose the Geometry column ot he remote WFS --- mapows.h | 1 + mapwfslayer.c | 13 +++++++++---- 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/mapows.h b/mapows.h index 50239636d4..571c6461e6 100644 --- a/mapows.h +++ b/mapows.h @@ -51,6 +51,7 @@ typedef struct { char *pszService; char *pszTypeName; char *pszFilter; + char *pszGeometryName; int nMaxFeatures; char *pszBbox; /* only used with a Get Request */ char *pszOutputFormat; /* only used with DescibeFeatureType */ diff --git a/mapwfslayer.c b/mapwfslayer.c index ad559a9dee..0722f451a4 100644 --- a/mapwfslayer.c +++ b/mapwfslayer.c @@ -68,7 +68,7 @@ static wfsParamsObj *msBuildRequestParams(mapObj *map, layerObj *lp, rectObj bbox; const char *pszTmp; int nLength, i = 0; - char *pszVersion, *pszTypeName = NULL; + char *pszVersion, *pszTypeName, *pszGeometryName = NULL; if (!map || !lp || !bbox_ret) return NULL; @@ -114,6 +114,10 @@ static wfsParamsObj *msBuildRequestParams(mapObj *map, layerObj *lp, } */ + pszTmp = msOWSLookupMetadata(&(lp->metadata), "FO", "geometryname"); + if (pszTmp) + psParams->pszGeometryName = msStrdup(pszTmp); + pszTmp = msOWSLookupMetadata(&(lp->metadata), "FO", "typename"); if (pszTmp) psParams->pszTypeName = msStrdup(pszTmp); @@ -232,8 +236,9 @@ static char *msBuildWFSLayerPostRequest(mapObj *map, layerObj *lp, } - if (psParams->pszGeometryName) - nGeometryName = psParams->pszGeometryName); + if (psParams->pszGeometryName) { + nGeometryName = psParams->pszGeometryName; + } if (psParams->pszFilter) pszFilter = psParams->pszFilter; @@ -242,7 +247,7 @@ static char *msBuildWFSLayerPostRequest(mapObj *map, layerObj *lp, pszFilter = (char *)msSmallMalloc(bufferSize); snprintf(pszFilter, bufferSize, "\n" "\n" - "%f\n" + "%s\n" "\n" "%f,%f %f,%f\n" "\n" From d351081b73edd515755a7f8af6a0245f17ad841a Mon Sep 17 00:00:00 2001 From: Yves Jacolin Date: Sat, 22 Sep 2012 14:50:38 +0200 Subject: [PATCH 3/3] nGeometryName changed to pszGeometryName for naming convention consistency and add a missing free(wfsparams->pszGeometryName) --- mapwfs.c | 1 + mapwfslayer.c | 6 +++--- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/mapwfs.c b/mapwfs.c index 6df8b12524..6727be46a9 100644 --- a/mapwfs.c +++ b/mapwfs.c @@ -2741,6 +2741,7 @@ void msWFSFreeParamsObj(wfsParamsObj *wfsparams) free(wfsparams->pszTypeName); free(wfsparams->pszFilter); free(wfsparams->pszBbox); + free(wfsparams->pszGeometryName); free(wfsparams->pszOutputFormat); free(wfsparams->pszFeatureId); free(wfsparams->pszSrs); diff --git a/mapwfslayer.c b/mapwfslayer.c index 0722f451a4..4f7fe6739c 100644 --- a/mapwfslayer.c +++ b/mapwfslayer.c @@ -218,7 +218,7 @@ static char *msBuildWFSLayerPostRequest(mapObj *map, layerObj *lp, { char *pszPostReq = NULL; char *pszFilter = NULL; - char *nGeometryName = "Geometry"; + char *pszGeometryName = "Geometry"; size_t bufferSize = 0; if (psParams->pszVersion == NULL || @@ -237,7 +237,7 @@ static char *msBuildWFSLayerPostRequest(mapObj *map, layerObj *lp, if (psParams->pszGeometryName) { - nGeometryName = psParams->pszGeometryName; + pszGeometryName = psParams->pszGeometryName; } if (psParams->pszFilter) @@ -252,7 +252,7 @@ static char *msBuildWFSLayerPostRequest(mapObj *map, layerObj *lp, "%f,%f %f,%f\n" "\n" "\n" - "", nGeometryName, bbox->minx, bbox->miny, bbox->maxx, bbox->maxy); + "", pszGeometryName, bbox->minx, bbox->miny, bbox->maxx, bbox->maxy); } bufferSize = strlen(pszFilter)+500;