PostGIS  3.4.0dev-r@@SVN_REVISION@@

◆ lw_dist2d_distribute_bruteforce()

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

Definition at line 357 of file measures.c.

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