Пример #1
0
  /*
   * Writes the SOLR query for spatial operator : BBOX, IsWithin, IsDisjointTo, IsWithin,
   * Intersects, Contains
   *
   * @param filter spatial operator to encode
   */
  private Object visitBinarySpatialOperator(BinarySpatialOperator filter, Object extraData) {
    StringWriter output = asStringWriter(extraData);
    Expression e1 = filter.getExpression1();
    checkExpressionIsProperty(e1);
    Expression e2 = filter.getExpression2();
    checkExpressionIsLiteral(e2);
    ExpressionToSolr visitor = new ExpressionToSolr();
    e1.accept(visitor, extraData);
    if (filter instanceof BBOX) {
      output.append(":\"Intersects(");
      e2.accept(visitor, extraData);
      output.append(")\"");
    } else if (filter instanceof Disjoint) {
      output.append(":\"IsDisjointTo(");
      e2.accept(visitor, extraData);
      output.append(")\"");
    } else if (filter instanceof Within) {
      output.append(":\"IsWithin(");
      e2.accept(visitor, extraData);
      output.append(")\"");
    } else if (filter instanceof Intersects) {
      output.append(":\"Intersects(");
      e2.accept(visitor, extraData);
      output.append(")\"");
    } else if (filter instanceof Contains) {
      output.append(":\"Contains(");
      e2.accept(visitor, extraData);
      output.append(")\"");
    } else {
      throw new RuntimeException("Unsupported filter type " + filter.getClass());
    }

    return output;
  }