PostGIS  3.2.2dev-r@@SVN_REVISION@@

◆ lw_dist2d_distribute_bruteforce()

int lw_dist2d_distribute_bruteforce ( const LWGEOM lwg1,
const LWGEOM lwg2,
DISTPTS dl 
)

Definition at line 388 of file measures.c.

389 {
390 
391  int t1 = lwg1->type;
392  int t2 = lwg2->type;
393 
394  switch (t1)
395  {
396  case POINTTYPE:
397  {
398  dl->twisted = 1;
399  switch (t2)
400  {
401  case POINTTYPE:
402  return lw_dist2d_point_point((LWPOINT *)lwg1, (LWPOINT *)lwg2, dl);
403  case LINETYPE:
404  return lw_dist2d_point_line((LWPOINT *)lwg1, (LWLINE *)lwg2, dl);
405  case TRIANGLETYPE:
406  return lw_dist2d_point_tri((LWPOINT *)lwg1, (LWTRIANGLE *)lwg2, dl);
407  case POLYGONTYPE:
408  return lw_dist2d_point_poly((LWPOINT *)lwg1, (LWPOLY *)lwg2, dl);
409  case CIRCSTRINGTYPE:
410  return lw_dist2d_point_circstring((LWPOINT *)lwg1, (LWCIRCSTRING *)lwg2, dl);
411  case CURVEPOLYTYPE:
412  return lw_dist2d_point_curvepoly((LWPOINT *)lwg1, (LWCURVEPOLY *)lwg2, dl);
413  default:
414  lwerror("%s: Unsupported geometry type: %s", __func__, lwtype_name(t2));
415  return LW_FALSE;
416  }
417  }
418  case LINETYPE:
419  {
420  dl->twisted = 1;
421  switch (t2)
422  {
423  case POINTTYPE:
424  dl->twisted = -1;
425  return lw_dist2d_point_line((LWPOINT *)lwg2, (LWLINE *)lwg1, dl);
426  case LINETYPE:
427  return lw_dist2d_line_line((LWLINE *)lwg1, (LWLINE *)lwg2, dl);
428  case TRIANGLETYPE:
429  return lw_dist2d_line_tri((LWLINE *)lwg1, (LWTRIANGLE *)lwg2, dl);
430  case POLYGONTYPE:
431  return lw_dist2d_line_poly((LWLINE *)lwg1, (LWPOLY *)lwg2, dl);
432  case CIRCSTRINGTYPE:
433  return lw_dist2d_line_circstring((LWLINE *)lwg1, (LWCIRCSTRING *)lwg2, dl);
434  case CURVEPOLYTYPE:
435  return lw_dist2d_line_curvepoly((LWLINE *)lwg1, (LWCURVEPOLY *)lwg2, dl);
436  default:
437  lwerror("%s: Unsupported geometry type: %s", __func__, lwtype_name(t2));
438  return LW_FALSE;
439  }
440  }
441  case TRIANGLETYPE:
442  {
443  dl->twisted = 1;
444  switch (t2)
445  {
446  case POINTTYPE:
447  dl->twisted = -1;
448  return lw_dist2d_point_tri((LWPOINT *)lwg2, (LWTRIANGLE *)lwg1, dl);
449  case LINETYPE:
450  dl->twisted = -1;
451  return lw_dist2d_line_tri((LWLINE *)lwg2, (LWTRIANGLE *)lwg1, dl);
452  case TRIANGLETYPE:
453  return lw_dist2d_tri_tri((LWTRIANGLE *)lwg1, (LWTRIANGLE *)lwg2, dl);
454  case POLYGONTYPE:
455  return lw_dist2d_tri_poly((LWTRIANGLE *)lwg1, (LWPOLY *)lwg2, dl);
456  case CIRCSTRINGTYPE:
457  return lw_dist2d_tri_circstring((LWTRIANGLE *)lwg1, (LWCIRCSTRING *)lwg2, dl);
458  case CURVEPOLYTYPE:
459  return lw_dist2d_tri_curvepoly((LWTRIANGLE *)lwg1, (LWCURVEPOLY *)lwg2, dl);
460  default:
461  lwerror("%s: Unsupported geometry type: %s", __func__, lwtype_name(t2));
462  return LW_FALSE;
463  }
464  }
465  case CIRCSTRINGTYPE:
466  {
467  dl->twisted = 1;
468  switch (t2)
469  {
470  case POINTTYPE:
471  dl->twisted = -1;
472  return lw_dist2d_point_circstring((LWPOINT *)lwg2, (LWCIRCSTRING *)lwg1, dl);
473  case LINETYPE:
474  dl->twisted = -1;
475  return lw_dist2d_line_circstring((LWLINE *)lwg2, (LWCIRCSTRING *)lwg1, dl);
476  case TRIANGLETYPE:
477  dl->twisted = -1;
478  return lw_dist2d_tri_circstring((LWTRIANGLE *)lwg2, (LWCIRCSTRING *)lwg1, dl);
479  case POLYGONTYPE:
480  return lw_dist2d_circstring_poly((LWCIRCSTRING *)lwg1, (LWPOLY *)lwg2, dl);
481  case CIRCSTRINGTYPE:
482  return lw_dist2d_circstring_circstring((LWCIRCSTRING *)lwg1, (LWCIRCSTRING *)lwg2, dl);
483  case CURVEPOLYTYPE:
484  return lw_dist2d_circstring_curvepoly((LWCIRCSTRING *)lwg1, (LWCURVEPOLY *)lwg2, dl);
485  default:
486  lwerror("%s: Unsupported geometry type: %s", __func__, lwtype_name(t2));
487  return LW_FALSE;
488  }
489  }
490  case POLYGONTYPE:
491  {
492  dl->twisted = -1;
493  switch (t2)
494  {
495  case POINTTYPE:
496  return lw_dist2d_point_poly((LWPOINT *)lwg2, (LWPOLY *)lwg1, dl);
497  case LINETYPE:
498  return lw_dist2d_line_poly((LWLINE *)lwg2, (LWPOLY *)lwg1, dl);
499  case TRIANGLETYPE:
500  return lw_dist2d_tri_poly((LWTRIANGLE *)lwg2, (LWPOLY *)lwg1, dl);
501  case CIRCSTRINGTYPE:
502  return lw_dist2d_circstring_poly((LWCIRCSTRING *)lwg2, (LWPOLY *)lwg1, dl);
503  case POLYGONTYPE:
504  dl->twisted = 1;
505  return lw_dist2d_poly_poly((LWPOLY *)lwg1, (LWPOLY *)lwg2, dl);
506  case CURVEPOLYTYPE:
507  dl->twisted = 1;
508  return lw_dist2d_poly_curvepoly((LWPOLY *)lwg1, (LWCURVEPOLY *)lwg2, dl);
509  default:
510  lwerror("%s: Unsupported geometry type: %s", __func__, lwtype_name(t2));
511  return LW_FALSE;
512  }
513  }
514  case CURVEPOLYTYPE:
515  {
516  dl->twisted = -1;
517  switch (t2)
518  {
519  case POINTTYPE:
520  return lw_dist2d_point_curvepoly((LWPOINT *)lwg2, (LWCURVEPOLY *)lwg1, dl);
521  case LINETYPE:
522  return lw_dist2d_line_curvepoly((LWLINE *)lwg2, (LWCURVEPOLY *)lwg1, dl);
523  case TRIANGLETYPE:
524  return lw_dist2d_tri_curvepoly((LWTRIANGLE *)lwg2, (LWCURVEPOLY *)lwg1, dl);
525  case POLYGONTYPE:
526  return lw_dist2d_poly_curvepoly((LWPOLY *)lwg2, (LWCURVEPOLY *)lwg1, dl);
527  case CIRCSTRINGTYPE:
528  return lw_dist2d_circstring_curvepoly((LWCIRCSTRING *)lwg2, (LWCURVEPOLY *)lwg1, dl);
529  case CURVEPOLYTYPE:
530  dl->twisted = 1;
531  return lw_dist2d_curvepoly_curvepoly((LWCURVEPOLY *)lwg1, (LWCURVEPOLY *)lwg2, dl);
532  default:
533  lwerror("%s: Unsupported geometry type: %s", __func__, lwtype_name(t2));
534  return LW_FALSE;
535  }
536  }
537  default:
538  {
539  lwerror("%s: Unsupported geometry type: %s", __func__, lwtype_name(t1));
540  return LW_FALSE;
541  }
542  }
543 
544  return LW_FALSE;
545 }
#define LW_FALSE
Definition: liblwgeom.h:108
#define CURVEPOLYTYPE
Definition: liblwgeom.h:125
#define LINETYPE
Definition: liblwgeom.h:117
#define POINTTYPE
LWTYPE numbers, used internally by PostGIS.
Definition: liblwgeom.h:116
#define POLYGONTYPE
Definition: liblwgeom.h:118
#define CIRCSTRINGTYPE
Definition: liblwgeom.h:123
const char * lwtype_name(uint8_t type)
Return the type name string associated with a type number (e.g.
Definition: lwutil.c:216
#define TRIANGLETYPE
Definition: liblwgeom.h:129
void lwerror(const char *fmt,...)
Write a notice out to the error handler.
Definition: lwutil.c:190
int lw_dist2d_circstring_curvepoly(LWCIRCSTRING *circ, LWCURVEPOLY *poly, DISTPTS *dl)
Definition: measures.c:1037
int lw_dist2d_line_curvepoly(LWLINE *line, LWCURVEPOLY *poly, DISTPTS *dl)
Definition: measures.c:776
int lw_dist2d_line_circstring(LWLINE *line1, LWCIRCSTRING *line2, DISTPTS *dl)
Definition: measures.c:726
int lw_dist2d_poly_poly(LWPOLY *poly1, LWPOLY *poly2, DISTPTS *dl)
Function handling polygon to polygon calculation 1 if we are looking for maxdistance,...
Definition: measures.c:963
int lw_dist2d_point_curvepoly(LWPOINT *point, LWCURVEPOLY *poly, DISTPTS *dl)
Definition: measures.c:679
int lw_dist2d_point_circstring(LWPOINT *point, LWCIRCSTRING *circ, DISTPTS *dl)
Definition: measures.c:638
int lw_dist2d_circstring_poly(LWCIRCSTRING *circ, LWPOLY *poly, DISTPTS *dl)
Definition: measures.c:1028
int lw_dist2d_tri_circstring(LWTRIANGLE *tri, LWCIRCSTRING *line, DISTPTS *dl)
Definition: measures.c:941
int lw_dist2d_line_tri(LWLINE *line, LWTRIANGLE *tri, DISTPTS *dl)
Definition: measures.c:712
int lw_dist2d_curvepoly_curvepoly(LWCURVEPOLY *poly1, LWCURVEPOLY *poly2, DISTPTS *dl)
Definition: measures.c:1049
int lw_dist2d_poly_curvepoly(LWPOLY *poly1, LWCURVEPOLY *curvepoly2, DISTPTS *dl)
Definition: measures.c:1019
int lw_dist2d_point_line(LWPOINT *point, LWLINE *line, DISTPTS *dl)
point to line calculation
Definition: measures.c:617
int lw_dist2d_tri_curvepoly(LWTRIANGLE *tri, LWCURVEPOLY *poly, DISTPTS *dl)
Definition: measures.c:899
int lw_dist2d_line_line(LWLINE *line1, LWLINE *line2, DISTPTS *dl)
Definition: measures.c:704
int lw_dist2d_tri_tri(LWTRIANGLE *tri1, LWTRIANGLE *tri2, DISTPTS *dl)
Definition: measures.c:808
int lw_dist2d_point_tri(LWPOINT *point, LWTRIANGLE *tri, DISTPTS *dl)
Definition: measures.c:624
int lw_dist2d_line_poly(LWLINE *line, LWPOLY *poly, DISTPTS *dl)
line to polygon calculation Brute force.
Definition: measures.c:743
int lw_dist2d_circstring_circstring(LWCIRCSTRING *line1, LWCIRCSTRING *line2, DISTPTS *dl)
Definition: measures.c:1043
int lw_dist2d_point_poly(LWPOINT *point, LWPOLY *poly, DISTPTS *dl)
Definition: measures.c:651
int lw_dist2d_tri_poly(LWTRIANGLE *tri, LWPOLY *poly, DISTPTS *dl)
Definition: measures.c:830
int lw_dist2d_point_point(LWPOINT *point1, LWPOINT *point2, DISTPTS *dl)
point to point calculation
Definition: measures.c:607
int twisted
Definition: measures.h:55
uint8_t type
Definition: liblwgeom.h:476

References CIRCSTRINGTYPE, CURVEPOLYTYPE, LINETYPE, lw_dist2d_circstring_circstring(), lw_dist2d_circstring_curvepoly(), lw_dist2d_circstring_poly(), lw_dist2d_curvepoly_curvepoly(), lw_dist2d_line_circstring(), lw_dist2d_line_curvepoly(), lw_dist2d_line_line(), lw_dist2d_line_poly(), lw_dist2d_line_tri(), lw_dist2d_point_circstring(), lw_dist2d_point_curvepoly(), lw_dist2d_point_line(), lw_dist2d_point_point(), lw_dist2d_point_poly(), lw_dist2d_point_tri(), lw_dist2d_poly_curvepoly(), lw_dist2d_poly_poly(), lw_dist2d_tri_circstring(), lw_dist2d_tri_curvepoly(), lw_dist2d_tri_poly(), lw_dist2d_tri_tri(), LW_FALSE, lwerror(), lwtype_name(), POINTTYPE, POLYGONTYPE, TRIANGLETYPE, DISTPTS::twisted, and LWGEOM::type.

Referenced by lw_dist2d_recursive().

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