PostGIS 3.7.0dev-r@@SVN_REVISION@@
Loading...
Searching...
No Matches

◆ 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}
const char * lwtype_name(uint8_t type)
Return the type name string associated with a type number (e.g.
Definition lwutil.c:216
#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
#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: