PostGIS 3.0.6dev-r@@SVN_REVISION@@
Loading...
Searching...
No Matches

◆ lwgeom_same()

char lwgeom_same ( const LWGEOM lwgeom1,
const LWGEOM lwgeom2 
)
extern

geom1 same as geom2 iff

  • have same type
    • have same # objects
  • have same bvol
  • each object in geom1 has a corresponding object in geom2 (see above)
    Parameters
    lwgeom1
    lwgeom2

Definition at line 573 of file lwgeom.c.

574{
575 LWDEBUGF(2, "lwgeom_same(%s, %s) called",
576 lwtype_name(lwgeom1->type),
577 lwtype_name(lwgeom2->type));
578
579 if ( lwgeom1->type != lwgeom2->type )
580 {
581 LWDEBUG(3, " type differ");
582
583 return LW_FALSE;
584 }
585
586 if ( FLAGS_GET_ZM(lwgeom1->flags) != FLAGS_GET_ZM(lwgeom2->flags) )
587 {
588 LWDEBUG(3, " ZM flags differ");
589
590 return LW_FALSE;
591 }
592
593 /* Check boxes if both already computed */
594 if ( lwgeom1->bbox && lwgeom2->bbox )
595 {
596 /*lwnotice("bbox1:%p, bbox2:%p", lwgeom1->bbox, lwgeom2->bbox);*/
597 if ( ! gbox_same(lwgeom1->bbox, lwgeom2->bbox) )
598 {
599 LWDEBUG(3, " bounding boxes differ");
600
601 return LW_FALSE;
602 }
603 }
604
605 /* geoms have same type, invoke type-specific function */
606 switch (lwgeom1->type)
607 {
608 case POINTTYPE:
609 return lwpoint_same((LWPOINT *)lwgeom1,
610 (LWPOINT *)lwgeom2);
611 case LINETYPE:
612 return lwline_same((LWLINE *)lwgeom1,
613 (LWLINE *)lwgeom2);
614 case POLYGONTYPE:
615 return lwpoly_same((LWPOLY *)lwgeom1,
616 (LWPOLY *)lwgeom2);
617 case TRIANGLETYPE:
618 return lwtriangle_same((LWTRIANGLE *)lwgeom1,
619 (LWTRIANGLE *)lwgeom2);
620 case CIRCSTRINGTYPE:
621 return lwcircstring_same((LWCIRCSTRING *)lwgeom1,
622 (LWCIRCSTRING *)lwgeom2);
623 case MULTIPOINTTYPE:
624 case MULTILINETYPE:
625 case MULTIPOLYGONTYPE:
626 case MULTICURVETYPE:
627 case MULTISURFACETYPE:
628 case COMPOUNDTYPE:
629 case CURVEPOLYTYPE:
631 case TINTYPE:
632 case COLLECTIONTYPE:
633 return lwcollection_same((LWCOLLECTION *)lwgeom1,
634 (LWCOLLECTION *)lwgeom2);
635 default:
636 lwerror("lwgeom_same: unsupported geometry type: %s",
637 lwtype_name(lwgeom1->type));
638 return LW_FALSE;
639 }
640
641}
int gbox_same(const GBOX *g1, const GBOX *g2)
Check if 2 given Gbox are the same.
Definition gbox.c:164
const char * lwtype_name(uint8_t type)
Return the type name string associated with a type number (e.g.
Definition lwutil.c:216
#define LW_FALSE
Definition liblwgeom.h:108
#define COLLECTIONTYPE
Definition liblwgeom.h:122
#define COMPOUNDTYPE
Definition liblwgeom.h:124
#define CURVEPOLYTYPE
Definition liblwgeom.h:125
#define MULTILINETYPE
Definition liblwgeom.h:120
#define MULTISURFACETYPE
Definition liblwgeom.h:127
#define LINETYPE
Definition liblwgeom.h:117
#define MULTIPOINTTYPE
Definition liblwgeom.h:119
#define POINTTYPE
LWTYPE numbers, used internally by PostGIS.
Definition liblwgeom.h:116
#define TINTYPE
Definition liblwgeom.h:130
#define MULTIPOLYGONTYPE
Definition liblwgeom.h:121
#define POLYGONTYPE
Definition liblwgeom.h:118
#define POLYHEDRALSURFACETYPE
Definition liblwgeom.h:128
#define CIRCSTRINGTYPE
Definition liblwgeom.h:123
#define FLAGS_GET_ZM(flags)
Definition liblwgeom.h:194
#define MULTICURVETYPE
Definition liblwgeom.h:126
#define TRIANGLETYPE
Definition liblwgeom.h:129
char lwcollection_same(const LWCOLLECTION *p1, const LWCOLLECTION *p2)
check for same geometry composition
char lwtriangle_same(const LWTRIANGLE *p1, const LWTRIANGLE *p2)
Definition lwtriangle.c:126
char lwline_same(const LWLINE *p1, const LWLINE *p2)
Definition lwline.c:141
char lwpoly_same(const LWPOLY *p1, const LWPOLY *p2)
Definition lwpoly.c:339
char lwcircstring_same(const LWCIRCSTRING *p1, const LWCIRCSTRING *p2)
char lwpoint_same(const LWPOINT *p1, const LWPOINT *p2)
Definition lwpoint.c:264
#define LWDEBUG(level, msg)
Definition lwgeom_log.h:83
#define LWDEBUGF(level, msg,...)
Definition lwgeom_log.h:88
void lwerror(const char *fmt,...)
Write a notice out to the error handler.
Definition lwutil.c:190
uint8_t type
Definition liblwgeom.h:564
uint8_t type
Definition liblwgeom.h:448
GBOX * bbox
Definition liblwgeom.h:444
lwflags_t flags
Definition liblwgeom.h:447

References LWGEOM::bbox, CIRCSTRINGTYPE, COLLECTIONTYPE, COMPOUNDTYPE, CURVEPOLYTYPE, LWGEOM::flags, FLAGS_GET_ZM, gbox_same(), LINETYPE, LW_FALSE, lwcircstring_same(), lwcollection_same(), LWDEBUG, LWDEBUGF, lwerror(), lwline_same(), lwpoint_same(), lwpoly_same(), lwtriangle_same(), lwtype_name(), MULTICURVETYPE, MULTILINETYPE, MULTIPOINTTYPE, MULTIPOLYGONTYPE, MULTISURFACETYPE, POINTTYPE, POLYGONTYPE, POLYHEDRALSURFACETYPE, TINTYPE, TRIANGLETYPE, LWGEOM::type, and LWPOINT::type.

Referenced by _lwt_AddPoint(), assert_all_results_found(), lwcollection_same(), test_lwcurve_linearize(), test_lwgeom_force_clockwise(), test_lwgeom_node(), and test_lwgeom_same().

Here is the call graph for this function:
Here is the caller graph for this function: