@Override
protected boolean queryMatches(byte[] t) {
long a = NumericUtils.sortableBytesToLong(t, 4 * LatLonShape.BYTES);
long b = NumericUtils.sortableBytesToLong(t, 5 * LatLonShape.BYTES);
long c = NumericUtils.sortableBytesToLong(t, 6 * LatLonShape.BYTES);
int aX = (int)((a >>> 32) & 0x00000000FFFFFFFFL);
int bX = (int)((b >>> 32) & 0x00000000FFFFFFFFL);
int cX = (int)((c >>> 32) & 0x00000000FFFFFFFFL);
int aY = (int)(a & 0x00000000FFFFFFFFL);
int bY = (int)(b & 0x00000000FFFFFFFFL);
int cY = (int)(c & 0x00000000FFFFFFFFL);
double alat = GeoEncodingUtils.decodeLatitude(aY);
double alon = GeoEncodingUtils.decodeLongitude(aX);
double blat = GeoEncodingUtils.decodeLatitude(bY);
double blon = GeoEncodingUtils.decodeLongitude(bX);
double clat = GeoEncodingUtils.decodeLatitude(cY);
double clon = GeoEncodingUtils.decodeLongitude(cX);
if (queryRelation == LatLonShape.QueryRelation.WITHIN) {
return line2D.relateTriangle(alon, alat, blon, blat, clon, clat) == Relation.CELL_INSIDE_QUERY;
}
return line2D.relateTriangle(alon, alat, blon, blat, clon, clat) != Relation.CELL_OUTSIDE_QUERY;
}