MCPcopy Index your code
hub / github.com/MapServer/MapServer / msSOSAddGeometryNode

Function msSOSAddGeometryNode

mapogcsos.c:374–552  ·  view source on GitHub ↗

/ msSOSAddGeometryNode */ / Outout gml 2 gemptry nodes based on a shape. All logic comes */ from gmlWriteGeometry_GML2. Should be merged at one point if */ possible. */ /

Source from the content-addressed store, hash-verified

372/* possible. */
373/************************************************************************/
374void msSOSAddGeometryNode(xmlNsPtr psNsGml, xmlNsPtr psNsMs, xmlNodePtr psParent, mapObj *map, layerObj *lp, shapeObj *psShape,
375 const char *pszEpsg)
376{
377 char *pszTmp = NULL;
378 int i,j = 0;
379 xmlNodePtr psPointNode, psNode, psLineNode, psPolygonNode;
380 int *panOuterList = NULL, *panInnerList = NULL;
381
382 if (psParent && psShape)
383 {
384 if (msProjectionsDiffer(&map->projection, &lp->projection) == MS_TRUE)
385 {
386 msProjectShape(&lp->projection, &map->projection, psShape);
387 pszEpsg = msOWSGetEPSGProj(&(map->projection), &(lp->metadata), "SO", MS_TRUE);
388 }
389 switch(psShape->type)
390 {
391 case(MS_SHAPE_POINT):
392 psNode = xmlNewChild(psParent, NULL, BAD_CAST "msGeometry", NULL);
393 xmlSetNs(psNode, psNsMs);
394 if (psShape->line[0].numpoints > 1)
395 {
396 psPointNode = xmlNewChild(psNode, NULL, BAD_CAST "MultiPoint", NULL);
397 xmlSetNs(psPointNode, psNsGml);
398
399 if (pszEpsg)
400 xmlNewProp(psPointNode, BAD_CAST "srsName", BAD_CAST pszEpsg);
401 }
402 else
403 psPointNode= psNode;
404
405 /*add all points */
406 for(i=0; i<psShape->line[0].numpoints; i++)
407 {
408 psNode = xmlAddChild(psPointNode, msGML3Point(psNsGml, pszEpsg, NULL, psShape->line[0].point[i].x, psShape->line[0].point[i].y));
409 }
410 break;
411
412 case(MS_SHAPE_LINE):
413 psNode = xmlNewChild(psParent, NULL, BAD_CAST "msGeometry", NULL);
414 xmlSetNs(psNode,xmlNewNs(psNode, NULL, NULL));
415 if (psShape->numlines > 1)
416 {
417 psLineNode = xmlNewChild(psNode, NULL, BAD_CAST "MultiLineString", NULL);
418 xmlSetNs(psLineNode,xmlNewNs(psLineNode,
419 BAD_CAST "http://www.opengis.net/gml",
420 BAD_CAST "gml"));
421
422 if (pszEpsg)
423 xmlNewProp(psLineNode, BAD_CAST "srsName", BAD_CAST pszEpsg);
424 }
425 else
426 psLineNode= psNode;
427
428 for(i=0; i<psShape->numlines; i++)
429 {
430 if (psShape->numlines > 1)
431 {

Callers 1

msSOSAddMemberNodeFunction · 0.85

Calls 8

msProjectionsDifferFunction · 0.85
msProjectShapeFunction · 0.85
msOWSGetEPSGProjFunction · 0.85
msGML3PointFunction · 0.85
msStringConcatenateFunction · 0.85
msDoubleToStringFunction · 0.85
msGetOuterListFunction · 0.85
msGetInnerListFunction · 0.85

Tested by

no test coverage detected