PostGIS  3.0.6dev-r@@SVN_REVISION@@

◆ lw_dist2d_distribute_bruteforce()

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

Definition at line 376 of file measures.c.

377 {
378 
379  int t1 = lwg1->type;
380  int t2 = lwg2->type;
381 
382  switch (t1)
383  {
384  case POINTTYPE:
385  {
386  dl->twisted = 1;
387  switch (t2)
388  {
389  case POINTTYPE:
390  return lw_dist2d_point_point((LWPOINT *)lwg1, (LWPOINT *)lwg2, dl);
391  case LINETYPE:
392  return lw_dist2d_point_line((LWPOINT *)lwg1, (LWLINE *)lwg2, dl);
393  case TRIANGLETYPE:
394  return lw_dist2d_point_tri((LWPOINT *)lwg1, (LWTRIANGLE *)lwg2, dl);
395  case POLYGONTYPE:
396  return lw_dist2d_point_poly((LWPOINT *)lwg1, (LWPOLY *)lwg2, dl);
397  case CIRCSTRINGTYPE:
398  return lw_dist2d_point_circstring((LWPOINT *)lwg1, (LWCIRCSTRING *)lwg2, dl);
399  case CURVEPOLYTYPE:
400  return lw_dist2d_point_curvepoly((LWPOINT *)lwg1, (LWCURVEPOLY *)lwg2, dl);
401  default:
402  lwerror("%s: Unsupported geometry type: %s", __func__, lwtype_name(t2));
403  return LW_FALSE;
404  }
405  }
406  case LINETYPE:
407  {
408  dl->twisted = 1;
409  switch (t2)
410  {
411  case POINTTYPE:
412  dl->twisted = -1;
413  return lw_dist2d_point_line((LWPOINT *)lwg2, (LWLINE *)lwg1, dl);
414  case LINETYPE:
415  return lw_dist2d_line_line((LWLINE *)lwg1, (LWLINE *)lwg2, dl);
416  case TRIANGLETYPE:
417  return lw_dist2d_line_tri((LWLINE *)lwg1, (LWTRIANGLE *)lwg2, dl);
418  case POLYGONTYPE:
419  return lw_dist2d_line_poly((LWLINE *)lwg1, (LWPOLY *)lwg2, dl);
420  case CIRCSTRINGTYPE:
421  return lw_dist2d_line_circstring((LWLINE *)lwg1, (LWCIRCSTRING *)lwg2, dl);
422  case CURVEPOLYTYPE:
423  return lw_dist2d_line_curvepoly((LWLINE *)lwg1, (LWCURVEPOLY *)lwg2, dl);
424  default:
425  lwerror("%s: Unsupported geometry type: %s", __func__, lwtype_name(t2));
426  return LW_FALSE;
427  }
428  }
429  case TRIANGLETYPE:
430  {
431  dl->twisted = 1;
432  switch (t2)
433  {
434  case POINTTYPE:
435  dl->twisted = -1;
436  return lw_dist2d_point_tri((LWPOINT *)lwg2, (LWTRIANGLE *)lwg1, dl);
437  case LINETYPE:
438  dl->twisted = -1;
439  return lw_dist2d_line_tri((LWLINE *)lwg2, (LWTRIANGLE *)lwg1, dl);
440  case TRIANGLETYPE:
441  return lw_dist2d_tri_tri((LWTRIANGLE *)lwg1, (LWTRIANGLE *)lwg2, dl);
442  case POLYGONTYPE:
443  return lw_dist2d_tri_poly((LWTRIANGLE *)lwg1, (LWPOLY *)lwg2, dl);
444  case CIRCSTRINGTYPE:
445  return lw_dist2d_tri_circstring((LWTRIANGLE *)lwg1, (LWCIRCSTRING *)lwg2, dl);
446  case CURVEPOLYTYPE:
447  return lw_dist2d_tri_curvepoly((LWTRIANGLE *)lwg1, (LWCURVEPOLY *)lwg2, dl);
448  default:
449  lwerror("%s: Unsupported geometry type: %s", __func__, lwtype_name(t2));
450  return LW_FALSE;
451  }
452  }
453  case CIRCSTRINGTYPE:
454  {
455  dl->twisted = 1;
456  switch (t2)
457  {
458  case POINTTYPE:
459  dl->twisted = -1;
460  return lw_dist2d_point_circstring((LWPOINT *)lwg2, (LWCIRCSTRING *)lwg1, dl);
461  case LINETYPE:
462  dl->twisted = -1;
463  return lw_dist2d_line_circstring((LWLINE *)lwg2, (LWCIRCSTRING *)lwg1, dl);
464  case TRIANGLETYPE:
465  dl->twisted = -1;
466  return lw_dist2d_tri_circstring((LWTRIANGLE *)lwg2, (LWCIRCSTRING *)lwg1, dl);
467  case POLYGONTYPE:
468  return lw_dist2d_circstring_poly((LWCIRCSTRING *)lwg1, (LWPOLY *)lwg2, dl);
469  case CIRCSTRINGTYPE:
470  return lw_dist2d_circstring_circstring((LWCIRCSTRING *)lwg1, (LWCIRCSTRING *)lwg2, dl);
471  case CURVEPOLYTYPE:
472  return lw_dist2d_circstring_curvepoly((LWCIRCSTRING *)lwg1, (LWCURVEPOLY *)lwg2, dl);
473  default:
474  lwerror("%s: Unsupported geometry type: %s", __func__, lwtype_name(t2));
475  return LW_FALSE;
476  }
477  }
478  case POLYGONTYPE:
479  {
480  dl->twisted = -1;
481  switch (t2)
482  {
483  case POINTTYPE:
484  return lw_dist2d_point_poly((LWPOINT *)lwg2, (LWPOLY *)lwg1, dl);
485  case LINETYPE:
486  return lw_dist2d_line_poly((LWLINE *)lwg2, (LWPOLY *)lwg1, dl);
487  case TRIANGLETYPE:
488  return lw_dist2d_tri_poly((LWTRIANGLE *)lwg2, (LWPOLY *)lwg1, dl);
489  case CIRCSTRINGTYPE:
490  return lw_dist2d_circstring_poly((LWCIRCSTRING *)lwg2, (LWPOLY *)lwg1, dl);
491  case POLYGONTYPE:
492  dl->twisted = 1;
493  return lw_dist2d_poly_poly((LWPOLY *)lwg1, (LWPOLY *)lwg2, dl);
494  case CURVEPOLYTYPE:
495  dl->twisted = 1;
496  return lw_dist2d_poly_curvepoly((LWPOLY *)lwg1, (LWCURVEPOLY *)lwg2, dl);
497  default:
498  lwerror("%s: Unsupported geometry type: %s", __func__, lwtype_name(t2));
499  return LW_FALSE;
500  }
501  }
502  case CURVEPOLYTYPE:
503  {
504  dl->twisted = -1;
505  switch (t2)
506  {
507  case POINTTYPE:
508  return lw_dist2d_point_curvepoly((LWPOINT *)lwg2, (LWCURVEPOLY *)lwg1, dl);
509  case LINETYPE:
510  return lw_dist2d_line_curvepoly((LWLINE *)lwg2, (LWCURVEPOLY *)lwg1, dl);
511  case TRIANGLETYPE:
512  return lw_dist2d_tri_curvepoly((LWTRIANGLE *)lwg2, (LWCURVEPOLY *)lwg1, dl);
513  case POLYGONTYPE:
514  return lw_dist2d_poly_curvepoly((LWPOLY *)lwg2, (LWCURVEPOLY *)lwg1, dl);
515  case CIRCSTRINGTYPE:
516  return lw_dist2d_circstring_curvepoly((LWCIRCSTRING *)lwg2, (LWCURVEPOLY *)lwg1, dl);
517  case CURVEPOLYTYPE:
518  dl->twisted = 1;
519  return lw_dist2d_curvepoly_curvepoly((LWCURVEPOLY *)lwg1, (LWCURVEPOLY *)lwg2, dl);
520  default:
521  lwerror("%s: Unsupported geometry type: %s", __func__, lwtype_name(t2));
522  return LW_FALSE;
523  }
524  }
525  default:
526  {
527  lwerror("%s: Unsupported geometry type: %s", __func__, lwtype_name(t1));
528  return LW_FALSE;
529  }
530  }
531 
532  return LW_FALSE;
533 }
#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:1055
int lw_dist2d_line_curvepoly(LWLINE *line, LWCURVEPOLY *poly, DISTPTS *dl)
Definition: measures.c:774
int lw_dist2d_line_circstring(LWLINE *line1, LWCIRCSTRING *line2, DISTPTS *dl)
Definition: measures.c:722
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:977
int lw_dist2d_point_curvepoly(LWPOINT *point, LWCURVEPOLY *poly, DISTPTS *dl)
Definition: measures.c:671
int lw_dist2d_point_circstring(LWPOINT *point, LWCIRCSTRING *circ, DISTPTS *dl)
Definition: measures.c:628
int lw_dist2d_circstring_poly(LWCIRCSTRING *circ, LWPOLY *poly, DISTPTS *dl)
Definition: measures.c:1046
int lw_dist2d_tri_circstring(LWTRIANGLE *tri, LWCIRCSTRING *line, DISTPTS *dl)
Definition: measures.c:953
int lw_dist2d_line_tri(LWLINE *line, LWTRIANGLE *tri, DISTPTS *dl)
Definition: measures.c:706
int lw_dist2d_curvepoly_curvepoly(LWCURVEPOLY *poly1, LWCURVEPOLY *poly2, DISTPTS *dl)
Definition: measures.c:1067
int lw_dist2d_poly_curvepoly(LWPOLY *poly1, LWCURVEPOLY *curvepoly2, DISTPTS *dl)
Definition: measures.c:1037
int lw_dist2d_point_line(LWPOINT *point, LWLINE *line, DISTPTS *dl)
point to line calculation
Definition: measures.c:605
int lw_dist2d_tri_curvepoly(LWTRIANGLE *tri, LWCURVEPOLY *poly, DISTPTS *dl)
Definition: measures.c:907
int lw_dist2d_line_line(LWLINE *line1, LWLINE *line2, DISTPTS *dl)
Definition: measures.c:698
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:612
int lw_dist2d_line_poly(LWLINE *line, LWPOLY *poly, DISTPTS *dl)
line to polygon calculation Brute force.
Definition: measures.c:739
int lw_dist2d_circstring_circstring(LWCIRCSTRING *line1, LWCIRCSTRING *line2, DISTPTS *dl)
Definition: measures.c:1061
int lw_dist2d_point_poly(LWPOINT *point, LWPOLY *poly, DISTPTS *dl)
Definition: measures.c:641
int lw_dist2d_tri_poly(LWTRIANGLE *tri, LWPOLY *poly, DISTPTS *dl)
Definition: measures.c:834
int lw_dist2d_point_point(LWPOINT *point1, LWPOINT *point2, DISTPTS *dl)
point to point calculation
Definition: measures.c:595
int twisted
Definition: measures.h:55
uint8_t type
Definition: liblwgeom.h:448

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: