I would preprocess your polygon set, applying the rule using only the rectangular extent first.
It is very easy to calculate the area of a rectangle, and fairly easy to obtain the bounding rectangle of an arbitrary polgyon.
If the area of the union of the two extents is 1/16 or more of the area of the subject extent, put them on the list of polygon pairs to compare.
EDIT: This will only work well for simple regular polygons... long, diagonal polygons or crescents will have a large rectangular extent but very small area, so will get skipped when they should be analyzed.
"In Oracle, calculating the distance on WGS-84 gets me the result in degrees."
That can only happen if your geometries are defined without any explicit SRID (= SDO_SRID is set to NULL). In that case, the database has no clue about what you are actually storing: it does not know that your data is actually geodetic. All it sees is some numbers that it assumes are in some unspecified cartesian projection. As a result, the distance you get is in decimal degrees. For example:
select sdo_geom.sdo_distance(
sdo_geometry(2001, null, sdo_point_type(-90.207591, 32.3205, null), null, null),
sdo_geometry(2001, null, sdo_point_type(-76.51416, 37.07585, null), null, null),
0.01
) as distance
from dual;
which returns
DISTANCE
----------
14.495634
in decimal degrees.
1359310.6 meters.
To get the proper result (= a distance measured in meters or any other chosen unit), you must explicitly specify that the points are in geodetic coordinates. For example:
select sdo_geom.sdo_distance(
sdo_geometry(2001, 4326, sdo_point_type(-90.207591, 32.3205, null), null, null),
sdo_geometry(2001, 4326, sdo_point_type(-76.51416, 37.07585, null), null, null),
0.01
) as distance
from dual;
which returns
DISTANCE
----------
1359310.6
This time the result is in the default distance unit, i.e. meters.
You can also specify an explicit unit for the result:
select sdo_geom.sdo_distance(
sdo_geometry(2001, 4326, sdo_point_type(-90.207591, 32.3205, null), null, null),
sdo_geometry(2001, 4326, sdo_point_type(-76.51416, 37.07585, null), null, null),
0.01,
'unit=mile'
) as distance
from dual;
The result is now:
DISTANCE
----------
844.636447
in miles.
I should add that storing geometries without any SRID is a very poor practice: you will not be able to do any calculations with those shapes (like measuring lengths, distances and areas) and you will not be able to match them with shapes in other coordinate systems. While you can get away with projected shapes without a SRID to some extent, having geodetic shapes without any SRID is a definite no-no.
Best Answer
sdo_relate or sdo_intersection?
It has been a while since I have used spatial.
This might be a place to start.
otn spatial forum