docs: function circle() {
    var args = mlutil.asArray.apply(null, arguments);
    var arg = null;
    switch(args.length) {
    case 0:
      throw new Error('missing radius and center for circle');
    case 1:
      throw new Error('has radius but missing center for circle');
    case 2:
      arg = args[1];
      if (arg instanceof PointRegionDef) {
        if (arg.point.length === 1) {
          return new CircleRegionDef(new CircleDef(args[0], arg.point));
        }
      } else if (arg instanceof LatLongDef) {
        return new CircleRegionDef(new CircleDef(args[0], [arg]));
      } else if (Array.isArray(arg) && arg.length === 2) {
        return new CircleRegionDef(new CircleDef(
            args[0], [new LatLongDef(arg[0], arg[1])]
            ));
      }
      throw new Error('invalid center for circle: '+mlutil.identify(arg, true));
    case 3:
      return new CircleRegionDef(new CircleDef(
          args[0], [new LatLongDef(args[1], args[2])]
          ));
    default:
      throw new Error('too many arguments for circle: '+args.length);
    }
  }