343{
344 GEOSGeometry* envelope;
345 GEOSGeometry* ring;
346 GEOSCoordSequence* seq = GEOSCoordSeq_create(5, 2);
347 if (!seq) return NULL;
348
349#if POSTGIS_GEOS_VERSION < 38
350 GEOSCoordSeq_setX(seq, 0, box->
xmin);
351 GEOSCoordSeq_setY(seq, 0, box->
ymin);
352
353 GEOSCoordSeq_setX(seq, 1, box->
xmax);
354 GEOSCoordSeq_setY(seq, 1, box->
ymin);
355
356 GEOSCoordSeq_setX(seq, 2, box->
xmax);
357 GEOSCoordSeq_setY(seq, 2, box->
ymax);
358
359 GEOSCoordSeq_setX(seq, 3, box->
xmin);
360 GEOSCoordSeq_setY(seq, 3, box->
ymax);
361
362 GEOSCoordSeq_setX(seq, 4, box->
xmin);
363 GEOSCoordSeq_setY(seq, 4, box->
ymin);
364#else
365 GEOSCoordSeq_setXY(seq, 0, box->
xmin, box->
ymin);
366 GEOSCoordSeq_setXY(seq, 1, box->
xmax, box->
ymin);
367 GEOSCoordSeq_setXY(seq, 2, box->
xmax, box->
ymax);
368 GEOSCoordSeq_setXY(seq, 3, box->
xmin, box->
ymax);
369 GEOSCoordSeq_setXY(seq, 4, box->
xmin, box->
ymin);
370#endif
371
372 ring = GEOSGeom_createLinearRing(seq);
373 if (!ring)
374 {
375 GEOSCoordSeq_destroy(seq);
376 return NULL;
377 }
378
379 envelope = GEOSGeom_createPolygon(ring, NULL, 0);
380 if (!envelope)
381 {
382 GEOSGeom_destroy(ring);
383 return NULL;
384 }
385
386 return envelope;
387}