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 356 of file measures.c.

357 {
358 
359  int t1 = lwg1->type;
360  int t2 = lwg2->type;
361 
362  switch (t1)
363  {
364  case POINTTYPE:
365  {
366  dl->twisted = 1;
367  switch (t2)
368  {
369  case POINTTYPE:
370  return lw_dist2d_point_point((LWPOINT *)lwg1, (LWPOINT *)lwg2, dl);
371  case LINETYPE:
372  return lw_dist2d_point_line((LWPOINT *)lwg1, (LWLINE *)lwg2, dl);
373  case TRIANGLETYPE:
374  return lw_dist2d_point_tri((LWPOINT *)lwg1, (LWTRIANGLE *)lwg2, dl);
375  case POLYGONTYPE:
376  return lw_dist2d_point_poly((LWPOINT *)lwg1, (LWPOLY *)lwg2, dl);
377  case CIRCSTRINGTYPE:
378  return lw_dist2d_point_circstring((LWPOINT *)lwg1, (LWCIRCSTRING *)lwg2, dl);
379  case CURVEPOLYTYPE:
380  return lw_dist2d_point_curvepoly((LWPOINT *)lwg1, (LWCURVEPOLY *)lwg2, dl);
381  default:
382  lwerror("%s: Unsupported geometry type: %s", __func__, lwtype_name(t2));
383  return LW_FALSE;
384  }
385  }
386  case LINETYPE:
387  {
388  dl->twisted = 1;
389  switch (t2)
390  {
391  case POINTTYPE:
392  dl->twisted = -1;
393  return lw_dist2d_point_line((LWPOINT *)lwg2, (LWLINE *)lwg1, dl);
394  case LINETYPE:
395  return lw_dist2d_line_line((LWLINE *)lwg1, (LWLINE *)lwg2, dl);
396  case TRIANGLETYPE:
397  return lw_dist2d_line_tri((LWLINE *)lwg1, (LWTRIANGLE *)lwg2, dl);
398  case POLYGONTYPE:
399  return lw_dist2d_line_poly((LWLINE *)lwg1, (LWPOLY *)lwg2, dl);
400  case CIRCSTRINGTYPE:
401  return lw_dist2d_line_circstring((LWLINE *)lwg1, (LWCIRCSTRING *)lwg2, dl);
402  case CURVEPOLYTYPE:
403  return lw_dist2d_line_curvepoly((LWLINE *)lwg1, (LWCURVEPOLY *)lwg2, dl);
404  default:
405  lwerror("%s: Unsupported geometry type: %s", __func__, lwtype_name(t2));
406  return LW_FALSE;
407  }
408  }
409  case TRIANGLETYPE:
410  {
411  dl->twisted = 1;
412  switch (t2)
413  {
414  case POINTTYPE:
415  dl->twisted = -1;
416  return lw_dist2d_point_tri((LWPOINT *)lwg2, (LWTRIANGLE *)lwg1, dl);
417  case LINETYPE:
418  dl->twisted = -1;
419  return lw_dist2d_line_tri((LWLINE *)lwg2, (LWTRIANGLE *)lwg1, dl);
420  case TRIANGLETYPE:
421  return lw_dist2d_tri_tri((LWTRIANGLE *)lwg1, (LWTRIANGLE *)lwg2, dl);
422  case POLYGONTYPE:
423  return lw_dist2d_tri_poly((LWTRIANGLE *)lwg1, (LWPOLY *)lwg2, dl);
424  case CIRCSTRINGTYPE:
425  return lw_dist2d_tri_circstring((LWTRIANGLE *)lwg1, (LWCIRCSTRING *)lwg2, dl);
426  case CURVEPOLYTYPE:
427  return lw_dist2d_tri_curvepoly((LWTRIANGLE *)lwg1, (LWCURVEPOLY *)lwg2, dl);
428  default:
429  lwerror("%s: Unsupported geometry type: %s", __func__, lwtype_name(t2));
430  return LW_FALSE;
431  }
432  }
433  case CIRCSTRINGTYPE:
434  {
435  dl->twisted = 1;
436  switch (t2)
437  {
438  case POINTTYPE:
439  dl->twisted = -1;
440  return lw_dist2d_point_circstring((LWPOINT *)lwg2, (LWCIRCSTRING *)lwg1, dl);
441  case LINETYPE:
442  dl->twisted = -1;
443  return lw_dist2d_line_circstring((LWLINE *)lwg2, (LWCIRCSTRING *)lwg1, dl);
444  case TRIANGLETYPE:
445  dl->twisted = -1;
446  return lw_dist2d_tri_circstring((LWTRIANGLE *)lwg2, (LWCIRCSTRING *)lwg1, dl);
447  case POLYGONTYPE:
448  return lw_dist2d_circstring_poly((LWCIRCSTRING *)lwg1, (LWPOLY *)lwg2, dl);
449  case CIRCSTRINGTYPE:
450  return lw_dist2d_circstring_circstring((LWCIRCSTRING *)lwg1, (LWCIRCSTRING *)lwg2, dl);
451  case CURVEPOLYTYPE:
452  return lw_dist2d_circstring_curvepoly((LWCIRCSTRING *)lwg1, (LWCURVEPOLY *)lwg2, dl);
453  default:
454  lwerror("%s: Unsupported geometry type: %s", __func__, lwtype_name(t2));
455  return LW_FALSE;
456  }
457  }
458  case POLYGONTYPE:
459  {
460  dl->twisted = -1;
461  switch (t2)
462  {
463  case POINTTYPE:
464  return lw_dist2d_point_poly((LWPOINT *)lwg2, (LWPOLY *)lwg1, dl);
465  case LINETYPE:
466  return lw_dist2d_line_poly((LWLINE *)lwg2, (LWPOLY *)lwg1, dl);
467  case TRIANGLETYPE:
468  return lw_dist2d_tri_poly((LWTRIANGLE *)lwg2, (LWPOLY *)lwg1, dl);
469  case CIRCSTRINGTYPE:
470  return lw_dist2d_circstring_poly((LWCIRCSTRING *)lwg2, (LWPOLY *)lwg1, dl);
471  case POLYGONTYPE:
472  dl->twisted = 1;
473  return lw_dist2d_poly_poly((LWPOLY *)lwg1, (LWPOLY *)lwg2, dl);
474  case CURVEPOLYTYPE:
475  dl->twisted = 1;
476  return lw_dist2d_poly_curvepoly((LWPOLY *)lwg1, (LWCURVEPOLY *)lwg2, dl);
477  default:
478  lwerror("%s: Unsupported geometry type: %s", __func__, lwtype_name(t2));
479  return LW_FALSE;
480  }
481  }
482  case CURVEPOLYTYPE:
483  {
484  dl->twisted = -1;
485  switch (t2)
486  {
487  case POINTTYPE:
488  return lw_dist2d_point_curvepoly((LWPOINT *)lwg2, (LWCURVEPOLY *)lwg1, dl);
489  case LINETYPE:
490  return lw_dist2d_line_curvepoly((LWLINE *)lwg2, (LWCURVEPOLY *)lwg1, dl);
491  case TRIANGLETYPE:
492  return lw_dist2d_tri_curvepoly((LWTRIANGLE *)lwg2, (LWCURVEPOLY *)lwg1, dl);
493  case POLYGONTYPE:
494  return lw_dist2d_poly_curvepoly((LWPOLY *)lwg2, (LWCURVEPOLY *)lwg1, dl);
495  case CIRCSTRINGTYPE:
496  return lw_dist2d_circstring_curvepoly((LWCIRCSTRING *)lwg2, (LWCURVEPOLY *)lwg1, dl);
497  case CURVEPOLYTYPE:
498  dl->twisted = 1;
499  return lw_dist2d_curvepoly_curvepoly((LWCURVEPOLY *)lwg1, (LWCURVEPOLY *)lwg2, dl);
500  default:
501  lwerror("%s: Unsupported geometry type: %s", __func__, lwtype_name(t2));
502  return LW_FALSE;
503  }
504  }
505  default:
506  {
507  lwerror("%s: Unsupported geometry type: %s", __func__, lwtype_name(t1));
508  return LW_FALSE;
509  }
510  }
511 
512  return LW_FALSE;
513 }
#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: