public SpatialRelation RelateXRange(double ext_minX, double ext_maxX)
{
//For ext & this we have local minX and maxX variable pairs. We rotate them so that minX <= maxX
double minX = this.minX;
double maxX = this.maxX;
if (ctx.IsGeo())
{
//unwrap dateline, plus do world-wrap short circuit
double rawWidth = maxX - minX;
if (rawWidth == 360)
return SpatialRelation.CONTAINS;
if (rawWidth < 0)
{
maxX = minX + (rawWidth + 360);
}
double ext_rawWidth = ext_maxX - ext_minX;
if (ext_rawWidth == 360)
return SpatialRelation.WITHIN;
if (ext_rawWidth < 0)
{
ext_maxX = ext_minX + (ext_rawWidth + 360);
}
//shift to potentially overlap
if (maxX < ext_minX)
{
minX += 360;
maxX += 360;
}
else if (ext_maxX < minX)
{
ext_minX += 360;
ext_maxX += 360;
}
}
return Relate_Range(minX, maxX, ext_minX, ext_maxX);
}