Calculate the box->box distance.
570{
571 int ndims, i;
572 double sum = 0;
573
574
575 ndims = Min(GIDX_NDIMS(b), GIDX_NDIMS(a));
576 for (i = 0; i < ndims; ++i)
577 {
578 double d;
579 double amin = GIDX_GET_MIN(a, i);
580 double amax = GIDX_GET_MAX(a, i);
581 double bmin = GIDX_GET_MIN(b, i);
582 double bmax = GIDX_GET_MAX(b, i);
583 POSTGIS_DEBUGF(3, "A %g - %g", amin, amax);
584 POSTGIS_DEBUGF(3, "B %g - %g", bmin, bmax);
585
586 if ((amin <= bmax && amax >= bmin))
587 {
588
589 d = 0;
590 }
591 else if (i == 4 && m_is_time)
592 {
593 return FLT_MAX;
594 }
595 else if (bmax < amin)
596 {
597
598 d = amin - bmax;
599 }
600 else
601 {
602
603 assert(bmin > amax);
604 d = bmin - amax;
605 }
606 if (!isfinite(d))
607 {
608
609 continue;
610 }
611 sum += d * d;
612 POSTGIS_DEBUGF(3, "dist %g, squared %g, grows sum to %g", d, d * d, sum);
613 }
614 return sqrt(sum);
615}