PostGIS  3.3.9dev-r@@SVN_REVISION@@

◆ lw_dist2d_distribute_bruteforce()

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

Definition at line 361 of file measures.c.

362 {
363 
364  int t1 = lwg1->type;
365  int t2 = lwg2->type;
366 
367  switch (t1)
368  {
369  case POINTTYPE:
370  {
371  dl->twisted = 1;
372  switch (t2)
373  {
374  case POINTTYPE:
375  return lw_dist2d_point_point((LWPOINT *)lwg1, (LWPOINT *)lwg2, dl);
376  case LINETYPE:
377  return lw_dist2d_point_line((LWPOINT *)lwg1, (LWLINE *)lwg2, dl);
378  case TRIANGLETYPE:
379  return lw_dist2d_point_tri((LWPOINT *)lwg1, (LWTRIANGLE *)lwg2, dl);
380  case POLYGONTYPE:
381  return lw_dist2d_point_poly((LWPOINT *)lwg1, (LWPOLY *)lwg2, dl);
382  case CIRCSTRINGTYPE:
383  return lw_dist2d_point_circstring((LWPOINT *)lwg1, (LWCIRCSTRING *)lwg2, dl);
384  case CURVEPOLYTYPE:
385  return lw_dist2d_point_curvepoly((LWPOINT *)lwg1, (LWCURVEPOLY *)lwg2, dl);
386  default:
387  lwerror("%s: Unsupported geometry type: %s", __func__, lwtype_name(t2));
388  return LW_FALSE;
389  }
390  }
391  case LINETYPE:
392  {
393  dl->twisted = 1;
394  switch (t2)
395  {
396  case POINTTYPE:
397  dl->twisted = -1;
398  return lw_dist2d_point_line((LWPOINT *)lwg2, (LWLINE *)lwg1, dl);
399  case LINETYPE:
400  return lw_dist2d_line_line((LWLINE *)lwg1, (LWLINE *)lwg2, dl);
401  case TRIANGLETYPE:
402  return lw_dist2d_line_tri((LWLINE *)lwg1, (LWTRIANGLE *)lwg2, dl);
403  case POLYGONTYPE:
404  return lw_dist2d_line_poly((LWLINE *)lwg1, (LWPOLY *)lwg2, dl);
405  case CIRCSTRINGTYPE:
406  return lw_dist2d_line_circstring((LWLINE *)lwg1, (LWCIRCSTRING *)lwg2, dl);
407  case CURVEPOLYTYPE:
408  return lw_dist2d_line_curvepoly((LWLINE *)lwg1, (LWCURVEPOLY *)lwg2, dl);
409  default:
410  lwerror("%s: Unsupported geometry type: %s", __func__, lwtype_name(t2));
411  return LW_FALSE;
412  }
413  }
414  case TRIANGLETYPE:
415  {
416  dl->twisted = 1;
417  switch (t2)
418  {
419  case POINTTYPE:
420  dl->twisted = -1;
421  return lw_dist2d_point_tri((LWPOINT *)lwg2, (LWTRIANGLE *)lwg1, dl);
422  case LINETYPE:
423  dl->twisted = -1;
424  return lw_dist2d_line_tri((LWLINE *)lwg2, (LWTRIANGLE *)lwg1, dl);
425  case TRIANGLETYPE:
426  return lw_dist2d_tri_tri((LWTRIANGLE *)lwg1, (LWTRIANGLE *)lwg2, dl);
427  case POLYGONTYPE:
428  return lw_dist2d_tri_poly((LWTRIANGLE *)lwg1, (LWPOLY *)lwg2, dl);
429  case CIRCSTRINGTYPE:
430  return lw_dist2d_tri_circstring((LWTRIANGLE *)lwg1, (LWCIRCSTRING *)lwg2, dl);
431  case CURVEPOLYTYPE:
432  return lw_dist2d_tri_curvepoly((LWTRIANGLE *)lwg1, (LWCURVEPOLY *)lwg2, dl);
433  default:
434  lwerror("%s: Unsupported geometry type: %s", __func__, lwtype_name(t2));
435  return LW_FALSE;
436  }
437  }
438  case CIRCSTRINGTYPE:
439  {
440  dl->twisted = 1;
441  switch (t2)
442  {
443  case POINTTYPE:
444  dl->twisted = -1;
445  return lw_dist2d_point_circstring((LWPOINT *)lwg2, (LWCIRCSTRING *)lwg1, dl);
446  case LINETYPE:
447  dl->twisted = -1;
448  return lw_dist2d_line_circstring((LWLINE *)lwg2, (LWCIRCSTRING *)lwg1, dl);
449  case TRIANGLETYPE:
450  dl->twisted = -1;
451  return lw_dist2d_tri_circstring((LWTRIANGLE *)lwg2, (LWCIRCSTRING *)lwg1, dl);
452  case POLYGONTYPE:
453  return lw_dist2d_circstring_poly((LWCIRCSTRING *)lwg1, (LWPOLY *)lwg2, dl);
454  case CIRCSTRINGTYPE:
455  return lw_dist2d_circstring_circstring((LWCIRCSTRING *)lwg1, (LWCIRCSTRING *)lwg2, dl);
456  case CURVEPOLYTYPE:
457  return lw_dist2d_circstring_curvepoly((LWCIRCSTRING *)lwg1, (LWCURVEPOLY *)lwg2, dl);
458  default:
459  lwerror("%s: Unsupported geometry type: %s", __func__, lwtype_name(t2));
460  return LW_FALSE;
461  }
462  }
463  case POLYGONTYPE:
464  {
465  dl->twisted = -1;
466  switch (t2)
467  {
468  case POINTTYPE:
469  return lw_dist2d_point_poly((LWPOINT *)lwg2, (LWPOLY *)lwg1, dl);
470  case LINETYPE:
471  return lw_dist2d_line_poly((LWLINE *)lwg2, (LWPOLY *)lwg1, dl);
472  case TRIANGLETYPE:
473  return lw_dist2d_tri_poly((LWTRIANGLE *)lwg2, (LWPOLY *)lwg1, dl);
474  case CIRCSTRINGTYPE:
475  return lw_dist2d_circstring_poly((LWCIRCSTRING *)lwg2, (LWPOLY *)lwg1, dl);
476  case POLYGONTYPE:
477  dl->twisted = 1;
478  return lw_dist2d_poly_poly((LWPOLY *)lwg1, (LWPOLY *)lwg2, dl);
479  case CURVEPOLYTYPE:
480  dl->twisted = 1;
481  return lw_dist2d_poly_curvepoly((LWPOLY *)lwg1, (LWCURVEPOLY *)lwg2, dl);
482  default:
483  lwerror("%s: Unsupported geometry type: %s", __func__, lwtype_name(t2));
484  return LW_FALSE;
485  }
486  }
487  case CURVEPOLYTYPE:
488  {
489  dl->twisted = -1;
490  switch (t2)
491  {
492  case POINTTYPE:
493  return lw_dist2d_point_curvepoly((LWPOINT *)lwg2, (LWCURVEPOLY *)lwg1, dl);
494  case LINETYPE:
495  return lw_dist2d_line_curvepoly((LWLINE *)lwg2, (LWCURVEPOLY *)lwg1, dl);
496  case TRIANGLETYPE:
497  return lw_dist2d_tri_curvepoly((LWTRIANGLE *)lwg2, (LWCURVEPOLY *)lwg1, dl);
498  case POLYGONTYPE:
499  return lw_dist2d_poly_curvepoly((LWPOLY *)lwg2, (LWCURVEPOLY *)lwg1, dl);
500  case CIRCSTRINGTYPE:
501  return lw_dist2d_circstring_curvepoly((LWCIRCSTRING *)lwg2, (LWCURVEPOLY *)lwg1, dl);
502  case CURVEPOLYTYPE:
503  dl->twisted = 1;
504  return lw_dist2d_curvepoly_curvepoly((LWCURVEPOLY *)lwg1, (LWCURVEPOLY *)lwg2, dl);
505  default:
506  lwerror("%s: Unsupported geometry type: %s", __func__, lwtype_name(t2));
507  return LW_FALSE;
508  }
509  }
510  default:
511  {
512  lwerror("%s: Unsupported geometry type: %s", __func__, lwtype_name(t1));
513  return LW_FALSE;
514  }
515  }
516 
517  return LW_FALSE;
518 }
#define LW_FALSE
Definition: liblwgeom.h:109
#define CURVEPOLYTYPE
Definition: liblwgeom.h:126
#define LINETYPE
Definition: liblwgeom.h:118
#define POINTTYPE
LWTYPE numbers, used internally by PostGIS.
Definition: liblwgeom.h:117
#define POLYGONTYPE
Definition: liblwgeom.h:119
#define CIRCSTRINGTYPE
Definition: liblwgeom.h:124
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:130
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:1060
int lw_dist2d_line_curvepoly(LWLINE *line, LWCURVEPOLY *poly, DISTPTS *dl)
Definition: measures.c:779
int lw_dist2d_line_circstring(LWLINE *line1, LWCIRCSTRING *line2, DISTPTS *dl)
Definition: measures.c:727
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:982
int lw_dist2d_point_curvepoly(LWPOINT *point, LWCURVEPOLY *poly, DISTPTS *dl)
Definition: measures.c:676
int lw_dist2d_point_circstring(LWPOINT *point, LWCIRCSTRING *circ, DISTPTS *dl)
Definition: measures.c:633
int lw_dist2d_circstring_poly(LWCIRCSTRING *circ, LWPOLY *poly, DISTPTS *dl)
Definition: measures.c:1051
int lw_dist2d_tri_circstring(LWTRIANGLE *tri, LWCIRCSTRING *line, DISTPTS *dl)
Definition: measures.c:958
int lw_dist2d_line_tri(LWLINE *line, LWTRIANGLE *tri, DISTPTS *dl)
Definition: measures.c:711
int lw_dist2d_curvepoly_curvepoly(LWCURVEPOLY *poly1, LWCURVEPOLY *poly2, DISTPTS *dl)
Definition: measures.c:1072
int lw_dist2d_poly_curvepoly(LWPOLY *poly1, LWCURVEPOLY *curvepoly2, DISTPTS *dl)
Definition: measures.c:1042
int lw_dist2d_point_line(LWPOINT *point, LWLINE *line, DISTPTS *dl)
point to line calculation
Definition: measures.c:610
int lw_dist2d_tri_curvepoly(LWTRIANGLE *tri, LWCURVEPOLY *poly, DISTPTS *dl)
Definition: measures.c:912
int lw_dist2d_line_line(LWLINE *line1, LWLINE *line2, DISTPTS *dl)
Definition: measures.c:703
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:617
int lw_dist2d_line_poly(LWLINE *line, LWPOLY *poly, DISTPTS *dl)
line to polygon calculation Brute force.
Definition: measures.c:744
int lw_dist2d_circstring_circstring(LWCIRCSTRING *line1, LWCIRCSTRING *line2, DISTPTS *dl)
Definition: measures.c:1066
int lw_dist2d_point_poly(LWPOINT *point, LWPOLY *poly, DISTPTS *dl)
Definition: measures.c:646
int lw_dist2d_tri_poly(LWTRIANGLE *tri, LWPOLY *poly, DISTPTS *dl)
Definition: measures.c:839
int lw_dist2d_point_point(LWPOINT *point1, LWPOINT *point2, DISTPTS *dl)
point to point calculation
Definition: measures.c:600
int twisted
Definition: measures.h:55
uint8_t type
Definition: liblwgeom.h:477

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: