Exemplo n.º 1
0
void GeometryPainter::drawGeometry(QPainter& pt, const OGRGeometry* geom, const QMatrix& m)
{
  switch (wkbFlatten(geom->getGeometryType()))
  {
    case wkbPoint:
      {
        drawPoint(pt, dynamic_cast<const OGRPoint*>(geom), m);
        break;
      }
    case wkbLineString:
      {
        drawLineString(pt, dynamic_cast<const OGRLineString*>(geom), m);
        break;
      }
    case wkbPolygon:
      {
        drawPolygon(pt, dynamic_cast<const OGRPolygon*>(geom), m);
        break;
      }
    case wkbMultiPoint:
    case wkbMultiLineString:
    case wkbMultiPolygon:
      {
        drawGeometryCollection(pt, dynamic_cast<const OGRGeometryCollection*>(geom), m);
        break;
      }
    default:
      {
        throw Exception("Internal Error: Geometry type is not supported.");
      }
  }
}
Exemplo n.º 2
0
/**
 * 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_getType(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);
}