@Override
 protected String getDistanceString(LeafReaderContext ctx, int docId) {
   StringBuilder values = new StringBuilder(mode.name());
   values.append(" of: [");
   final MultiGeoPointValues geoPointValues = fieldData.load(ctx).getGeoPointValues();
   geoPointValues.setDocument(docId);
   final int num = geoPointValues.count();
   if (num > 0) {
     for (int i = 0; i < num; i++) {
       GeoPoint value = geoPointValues.valueAt(i);
       values.append("Math.max(arcDistance(");
       values
           .append(value)
           .append("(=doc value),")
           .append(origin)
           .append("(=origin)) - ")
           .append(offset)
           .append("(=offset), 0)");
       if (i != num - 1) {
         values.append(", ");
       }
     }
   } else {
     values.append("0.0");
   }
   values.append("]");
   return values.toString();
 }
 @Override
 protected boolean matchDoc(int doc) {
   values.setDocument(doc);
   final int length = values.count();
   for (int i = 0; i < length; i++) {
     GeoPoint point = values.valueAt(i);
     if (pointInPolygon(points, point.lat(), point.lon())) {
       return true;
     }
   }
   return false;
 }