/ msSOSAddGeometryNode */ / Outout gml 2 gemptry nodes based on a shape. All logic comes */ from gmlWriteGeometry_GML2. Should be merged at one point if */ possible. */ /
| 372 | /* possible. */ |
| 373 | /************************************************************************/ |
| 374 | void 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 | { |
no test coverage detected