PostGIS  3.6.1dev-r@@SVN_REVISION@@

◆ lw_dist2d_distribute_bruteforce()

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

Definition at line 393 of file measures.c.

394 {
395 
396  int t1 = lwg1->type;
397  int t2 = lwg2->type;
398 
399  switch (t1)
400  {
401  case POINTTYPE:
402  {
403  dl->twisted = 1;
404  switch (t2)
405  {
406  case POINTTYPE:
407  return lw_dist2d_point_point((LWPOINT *)lwg1, (LWPOINT *)lwg2, dl);
408  case LINETYPE:
409  return lw_dist2d_point_line((LWPOINT *)lwg1, (LWLINE *)lwg2, dl);
410  case TRIANGLETYPE:
411  return lw_dist2d_point_tri((LWPOINT *)lwg1, (LWTRIANGLE *)lwg2, dl);
412  case POLYGONTYPE:
413  return lw_dist2d_point_poly((LWPOINT *)lwg1, (LWPOLY *)lwg2, dl);
414  case CIRCSTRINGTYPE:
415  return lw_dist2d_point_circstring((LWPOINT *)lwg1, (LWCIRCSTRING *)lwg2, dl);
416  case CURVEPOLYTYPE:
417  return lw_dist2d_point_curvepoly((LWPOINT *)lwg1, (LWCURVEPOLY *)lwg2, dl);
418  default:
419  lwerror("%s: Unsupported geometry type: %s", __func__, lwtype_name(t2));
420  return LW_FALSE;
421  }
422  }
423  case LINETYPE:
424  {
425  dl->twisted = 1;
426  switch (t2)
427  {
428  case POINTTYPE:
429  dl->twisted = -1;
430  return lw_dist2d_point_line((LWPOINT *)lwg2, (LWLINE *)lwg1, dl);
431  case LINETYPE:
432  return lw_dist2d_line_line((LWLINE *)lwg1, (LWLINE *)lwg2, dl);
433  case TRIANGLETYPE:
434  return lw_dist2d_line_tri((LWLINE *)lwg1, (LWTRIANGLE *)lwg2, dl);
435  case POLYGONTYPE:
436  return lw_dist2d_line_poly((LWLINE *)lwg1, (LWPOLY *)lwg2, dl);
437  case CIRCSTRINGTYPE:
438  return lw_dist2d_line_circstring((LWLINE *)lwg1, (LWCIRCSTRING *)lwg2, dl);
439  case CURVEPOLYTYPE:
440  return lw_dist2d_line_curvepoly((LWLINE *)lwg1, (LWCURVEPOLY *)lwg2, dl);
441  default:
442  lwerror("%s: Unsupported geometry type: %s", __func__, lwtype_name(t2));
443  return LW_FALSE;
444  }
445  }
446  case TRIANGLETYPE:
447  {
448  dl->twisted = 1;
449  switch (t2)
450  {
451  case POINTTYPE:
452  dl->twisted = -1;
453  return lw_dist2d_point_tri((LWPOINT *)lwg2, (LWTRIANGLE *)lwg1, dl);
454  case LINETYPE:
455  dl->twisted = -1;
456  return lw_dist2d_line_tri((LWLINE *)lwg2, (LWTRIANGLE *)lwg1, dl);
457  case TRIANGLETYPE:
458  return lw_dist2d_tri_tri((LWTRIANGLE *)lwg1, (LWTRIANGLE *)lwg2, dl);
459  case POLYGONTYPE:
460  return lw_dist2d_tri_poly((LWTRIANGLE *)lwg1, (LWPOLY *)lwg2, dl);
461  case CIRCSTRINGTYPE:
462  return lw_dist2d_tri_circstring((LWTRIANGLE *)lwg1, (LWCIRCSTRING *)lwg2, dl);
463  case CURVEPOLYTYPE:
464  return lw_dist2d_tri_curvepoly((LWTRIANGLE *)lwg1, (LWCURVEPOLY *)lwg2, dl);
465  default:
466  lwerror("%s: Unsupported geometry type: %s", __func__, lwtype_name(t2));
467  return LW_FALSE;
468  }
469  }
470  case CIRCSTRINGTYPE:
471  {
472  dl->twisted = 1;
473  switch (t2)
474  {
475  case POINTTYPE:
476  dl->twisted = -1;
477  return lw_dist2d_point_circstring((LWPOINT *)lwg2, (LWCIRCSTRING *)lwg1, dl);
478  case LINETYPE:
479  dl->twisted = -1;
480  return lw_dist2d_line_circstring((LWLINE *)lwg2, (LWCIRCSTRING *)lwg1, dl);
481  case TRIANGLETYPE:
482  dl->twisted = -1;
483  return lw_dist2d_tri_circstring((LWTRIANGLE *)lwg2, (LWCIRCSTRING *)lwg1, dl);
484  case POLYGONTYPE:
485  return lw_dist2d_circstring_poly((LWCIRCSTRING *)lwg1, (LWPOLY *)lwg2, dl);
486  case CIRCSTRINGTYPE:
487  return lw_dist2d_circstring_circstring((LWCIRCSTRING *)lwg1, (LWCIRCSTRING *)lwg2, dl);
488  case CURVEPOLYTYPE:
489  return lw_dist2d_circstring_curvepoly((LWCIRCSTRING *)lwg1, (LWCURVEPOLY *)lwg2, dl);
490  default:
491  lwerror("%s: Unsupported geometry type: %s", __func__, lwtype_name(t2));
492  return LW_FALSE;
493  }
494  }
495  case POLYGONTYPE:
496  {
497  dl->twisted = -1;
498  switch (t2)
499  {
500  case POINTTYPE:
501  return lw_dist2d_point_poly((LWPOINT *)lwg2, (LWPOLY *)lwg1, dl);
502  case LINETYPE:
503  return lw_dist2d_line_poly((LWLINE *)lwg2, (LWPOLY *)lwg1, dl);
504  case TRIANGLETYPE:
505  return lw_dist2d_tri_poly((LWTRIANGLE *)lwg2, (LWPOLY *)lwg1, dl);
506  case CIRCSTRINGTYPE:
507  return lw_dist2d_circstring_poly((LWCIRCSTRING *)lwg2, (LWPOLY *)lwg1, dl);
508  case POLYGONTYPE:
509  dl->twisted = 1;
510  return lw_dist2d_poly_poly((LWPOLY *)lwg1, (LWPOLY *)lwg2, dl);
511  case CURVEPOLYTYPE:
512  dl->twisted = 1;
513  return lw_dist2d_poly_curvepoly((LWPOLY *)lwg1, (LWCURVEPOLY *)lwg2, dl);
514  default:
515  lwerror("%s: Unsupported geometry type: %s", __func__, lwtype_name(t2));
516  return LW_FALSE;
517  }
518  }
519  case CURVEPOLYTYPE:
520  {
521  dl->twisted = -1;
522  switch (t2)
523  {
524  case POINTTYPE:
525  return lw_dist2d_point_curvepoly((LWPOINT *)lwg2, (LWCURVEPOLY *)lwg1, dl);
526  case LINETYPE:
527  return lw_dist2d_line_curvepoly((LWLINE *)lwg2, (LWCURVEPOLY *)lwg1, dl);
528  case TRIANGLETYPE:
529  return lw_dist2d_tri_curvepoly((LWTRIANGLE *)lwg2, (LWCURVEPOLY *)lwg1, dl);
530  case POLYGONTYPE:
531  return lw_dist2d_poly_curvepoly((LWPOLY *)lwg2, (LWCURVEPOLY *)lwg1, dl);
532  case CIRCSTRINGTYPE:
533  return lw_dist2d_circstring_curvepoly((LWCIRCSTRING *)lwg2, (LWCURVEPOLY *)lwg1, dl);
534  case CURVEPOLYTYPE:
535  dl->twisted = 1;
536  return lw_dist2d_curvepoly_curvepoly((LWCURVEPOLY *)lwg1, (LWCURVEPOLY *)lwg2, dl);
537  default:
538  lwerror("%s: Unsupported geometry type: %s", __func__, lwtype_name(t2));
539  return LW_FALSE;
540  }
541  }
542  default:
543  {
544  lwerror("%s: Unsupported geometry type: %s", __func__, lwtype_name(t1));
545  return LW_FALSE;
546  }
547  }
548 
549  return LW_FALSE;
550 }
#define LW_FALSE
Definition: liblwgeom.h:94
#define CURVEPOLYTYPE
Definition: liblwgeom.h:111
#define LINETYPE
Definition: liblwgeom.h:103
#define POINTTYPE
LWTYPE numbers, used internally by PostGIS.
Definition: liblwgeom.h:102
#define POLYGONTYPE
Definition: liblwgeom.h:104
#define CIRCSTRINGTYPE
Definition: liblwgeom.h:109
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:115
void void lwerror(const char *fmt,...) __attribute__((format(printf
Write a notice out to the error handler.
int lw_dist2d_circstring_curvepoly(LWCIRCSTRING *circ, LWCURVEPOLY *poly, DISTPTS *dl)
Definition: measures.c:1042
int lw_dist2d_line_curvepoly(LWLINE *line, LWCURVEPOLY *poly, DISTPTS *dl)
Definition: measures.c:781
int lw_dist2d_line_circstring(LWLINE *line1, LWCIRCSTRING *line2, DISTPTS *dl)
Definition: measures.c:731
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:968
int lw_dist2d_point_curvepoly(LWPOINT *point, LWCURVEPOLY *poly, DISTPTS *dl)
Definition: measures.c:684
int lw_dist2d_point_circstring(LWPOINT *point, LWCIRCSTRING *circ, DISTPTS *dl)
Definition: measures.c:643
int lw_dist2d_circstring_poly(LWCIRCSTRING *circ, LWPOLY *poly, DISTPTS *dl)
Definition: measures.c:1033
int lw_dist2d_tri_circstring(LWTRIANGLE *tri, LWCIRCSTRING *line, DISTPTS *dl)
Definition: measures.c:946
int lw_dist2d_line_tri(LWLINE *line, LWTRIANGLE *tri, DISTPTS *dl)
Definition: measures.c:717
int lw_dist2d_curvepoly_curvepoly(LWCURVEPOLY *poly1, LWCURVEPOLY *poly2, DISTPTS *dl)
Definition: measures.c:1054
int lw_dist2d_poly_curvepoly(LWPOLY *poly1, LWCURVEPOLY *curvepoly2, DISTPTS *dl)
Definition: measures.c:1024
int lw_dist2d_point_line(LWPOINT *point, LWLINE *line, DISTPTS *dl)
point to line calculation
Definition: measures.c:622
int lw_dist2d_tri_curvepoly(LWTRIANGLE *tri, LWCURVEPOLY *poly, DISTPTS *dl)
Definition: measures.c:904
int lw_dist2d_line_line(LWLINE *line1, LWLINE *line2, DISTPTS *dl)
Definition: measures.c:709
int lw_dist2d_tri_tri(LWTRIANGLE *tri1, LWTRIANGLE *tri2, DISTPTS *dl)
Definition: measures.c:813
int lw_dist2d_point_tri(LWPOINT *point, LWTRIANGLE *tri, DISTPTS *dl)
Definition: measures.c:629
int lw_dist2d_line_poly(LWLINE *line, LWPOLY *poly, DISTPTS *dl)
line to polygon calculation Brute force.
Definition: measures.c:748
int lw_dist2d_circstring_circstring(LWCIRCSTRING *line1, LWCIRCSTRING *line2, DISTPTS *dl)
Definition: measures.c:1048
int lw_dist2d_point_poly(LWPOINT *point, LWPOLY *poly, DISTPTS *dl)
Definition: measures.c:656
int lw_dist2d_tri_poly(LWTRIANGLE *tri, LWPOLY *poly, DISTPTS *dl)
Definition: measures.c:835
int lw_dist2d_point_point(LWPOINT *point1, LWPOINT *point2, DISTPTS *dl)
point to point calculation
Definition: measures.c:612
int twisted
Definition: measures.h:55
uint8_t type
Definition: liblwgeom.h:462

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: